MeanJS স্ট্যাক (MongoDB, Express.js, AngularJS, Node.js) ব্যবহার করে authentication এবং authorization সিস্টেম তৈরি করা একটি গুরুত্বপূর্ণ বিষয়। সঠিকভাবে সিকিউরিটি ব্যবস্থা না থাকলে অ্যাপ্লিকেশনটি হ্যাকিংয়ের ঝুঁকির মধ্যে পড়তে পারে এবং ব্যবহারকারীর ডেটা বিপদগ্রস্ত হতে পারে। তাই, authentication এবং authorization সঠিকভাবে পরিচালনা করা অত্যন্ত জরুরি।
এই গাইডে, আমরা MeanJS স্ট্যাকের জন্য বিভিন্ন security measures আলোচনা করব, যা আপনার অ্যাপ্লিকেশনের authentication এবং authorization নিরাপদ ও কার্যকরী করবে।
Authentication: What is It?
Authentication হল প্রক্রিয়া যেখানে ব্যবহারকারীর পরিচয় যাচাই করা হয়। এটি নিশ্চিত করে যে, একজন ব্যবহারকারী সঠিক এবং অনুমোদিত ব্যক্তি, যেমন একটি ইউজারনেম এবং পাসওয়ার্ডের মাধ্যমে।
Authentication in MeanJS
Authentication সাধারণত JWT (JSON Web Token) বা OAuth ব্যবহার করে পরিচালনা করা হয়। এখানে, আমরা JWT ভিত্তিক অথেনটিকেশন নিয়ে আলোচনা করব, কারণ এটি অনেক জনপ্রিয় এবং নিরাপদ।
1. JWT (JSON Web Token) Authentication
JWT একটি ওপেন স্ট্যান্ডার্ড (RFC 7519) যা client-server authentication এর জন্য ব্যবহৃত হয়। এটি একটি সাইন করা token প্রদান করে, যা ব্যবহারকারীর সেশন পরিচালনা করতে ব্যবহৃত হয়।
JWT Authentication Flow
- ব্যবহারকারী login করলে, সার্ভার ব্যবহারকারীর username এবং password যাচাই করে।
- যদি যাচাই সফল হয়, সার্ভার একটি JWT token প্রদান করে।
- ব্যবহারকারী পরবর্তী প্রতিটি রিকোয়েস্টে সেই token প্রদান করে, এবং সার্ভার সেই token যাচাই করে।
JWT Setup in Node.js (Express.js)
JWT ব্যবহারের জন্য jsonwebtoken প্যাকেজ ইনস্টল করতে হবে:
npm install jsonwebtoken --save
এখন, Express.js এ JWT ব্যবহারের উদাহরণ:
// server/routes/auth.routes.js
const express = require('express');
const jwt = require('jsonwebtoken');
const User = require('../models/user.model');
const router = express.Router();
// Login route for authentication
router.post('/login', function(req, res) {
const { email, password } = req.body;
User.findOne({ email }, function(err, user) {
if (err || !user) {
return res.status(400).send({ message: 'User not found' });
}
// Check password (use bcrypt in real applications)
if (password === user.password) {
// Generate JWT token
const token = jwt.sign({ id: user._id }, 'your_jwt_secret_key', { expiresIn: '1h' });
return res.json({ token });
} else {
return res.status(401).send({ message: 'Invalid password' });
}
});
});
module.exports = router;
এখানে:
- jsonwebtoken প্যাকেজের মাধ্যমে JWT তৈরি করা হচ্ছে।
- JWT ক্লায়েন্টকে পাঠানো হচ্ছে, যাতে পরবর্তী রিকুয়েস্টে সেই টোকেন ব্যবহার করা যায়।
Verify JWT Middleware
JWT token যাচাই করার জন্য একটি middleware তৈরি করতে হবে, যা প্রতিটি প্রটেক্টেড রুটে ব্যবহৃত হবে।
// server/middleware/auth.middleware.js
const jwt = require('jsonwebtoken');
// JWT token verification middleware
module.exports = function(req, res, next) {
const token = req.headers['authorization'];
if (!token) {
return res.status(403).send({ message: 'No token provided' });
}
jwt.verify(token, 'your_jwt_secret_key', function(err, decoded) {
if (err) {
return res.status(500).send({ message: 'Failed to authenticate token' });
}
req.userId = decoded.id;
next(); // Proceed to the next middleware/route handler
});
};
এখানে, jwt.verify() ব্যবহার করে token যাচাই করা হচ্ছে। যদি টোকেন বৈধ না হয়, তবে 401 Unauthorized বা 403 Forbidden স্ট্যাটাস কোড রিটার্ন করা হবে।
Authorization: What is It?
Authorization হল প্রক্রিয়া যেখানে যাচাই করা হয় যে, ব্যবহারকারী কোন অ্যাকশন বা রিসোর্স অ্যাক্সেস করতে পারবে কি না। সাধারণত, এটি roles বা permissions এর ভিত্তিতে পরিচালিত হয়। যেমন, শুধুমাত্র অ্যাডমিন ব্যবহারকারী admin dashboard অ্যাক্সেস করতে পারবে, কিন্তু সাধারণ ব্যবহারকারী তা করতে পারবে না।
Authorization in MeanJS
Authorization সাধারণত JWT এর সাথে ব্যবহার করে role-based access control (RBAC) বা permission-based control পরিচালনা করা হয়।
Role-based Access Control (RBAC)
RBAC-এ, প্রতিটি ব্যবহারকারীকে একটি নির্দিষ্ট role দেওয়া হয় (যেমন, admin, user, moderator), এবং সেই রোল অনুযায়ী তাদের অ্যাক্সেস প্রদান করা হয়।
RBAC Example
// server/middleware/role.middleware.js
module.exports = function(roles) {
return function(req, res, next) {
if (!roles.includes(req.userRole)) {
return res.status(403).send({ message: 'You do not have permission' });
}
next();
};
};
এখানে:
- roles অ্যারে নির্দিষ্ট করে যে, কোন রোলগুলোর কাছে অ্যাক্সেস অনুমোদিত।
- যদি ব্যবহারকারী অনুমোদিত রোলের মধ্যে না থাকে, তবে 403 Forbidden স্ট্যাটাস কোড ফেরত পাঠানো হবে।
Security Measures for Authentication and Authorization
1. Secure Password Storage
ব্যবহারকারীর পাসওয়ার্ড কখনো plaintext এ সংরক্ষণ করবেন না। বরং bcrypt বা argon2 এর মতো শক্তিশালী পাসওয়ার্ড হ্যাশিং লাইব্রেরি ব্যবহার করুন।
npm install bcryptjs --save
const bcrypt = require('bcryptjs');
// Hash password before saving to DB
const hashedPassword = bcrypt.hashSync(password, 10);
// Verify password during login
const isMatch = bcrypt.compareSync(password, user.password);
2. Use HTTPS
HTTPS (SSL/TLS) ব্যবহার করুন, যাতে সমস্ত ডেটা এনক্রিপ্ট হয়ে যায় এবং ট্রান্সমিশন নিরাপদ থাকে। এটি man-in-the-middle attacks এবং অন্যান্য সাইবার আক্রমণ থেকে রক্ষা করে।
3. Set Proper Token Expiry
JWT এর জন্য একটি token expiry সময় নির্ধারণ করা উচিত। এটি ব্যবহারকারীকে সেশনের নির্দিষ্ট সময় পর লগ আউট করতে সাহায্য করবে এবং অ্যাপ্লিকেশনের নিরাপত্তা উন্নত করবে।
const token = jwt.sign({ id: user._id }, 'your_jwt_secret_key', { expiresIn: '1h' });
এখানে expiresIn ১ ঘণ্টা সেট করা হয়েছে, যার মাধ্যমে টোকেন ১ ঘণ্টা পর মেয়াদ উত্তীর্ণ হয়ে যাবে।
4. Use CSRF Protection
যখন ব্যবহারকারী ফর্ম পূরণ করে, তখন Cross-Site Request Forgery (CSRF) আক্রমণ হতে পারে। CSRF tokens ব্যবহার করে এই ধরনের আক্রমণ প্রতিরোধ করা যায়।
5. Implement Rate Limiting
Rate limiting ব্যবহার করে একটি সার্ভারে একে অপরের সেবা গ্রহণের সীমা নির্ধারণ করা যায়। এটি Denial of Service (DoS) আক্রমণ বা brute-force attacks থেকে রক্ষা করে।
npm install express-rate-limit --save
const rateLimit = require('express-rate-limit');
// Apply rate limiter to login route
const limiter = rateLimit({
windowMs: 15 * 60 * 1000, // 15 minutes
max: 100 // Limit each IP to 100 requests per windowMs
});
app.use('/login', limiter);
Conclusion
MeanJS স্ট্যাকের মধ্যে authentication এবং authorization ব্যবস্থাপনার জন্য সিকিউরিটি মেজারস অপরিহার্য। JWT এবং role-based access control এর মাধ্যমে আপনি নিরাপদ লগইন এবং অ্যাক্সেস ম্যানেজমেন্ট নিশ্চিত করতে পারবেন। এছাড়া, পাসওয়ার্ড হ্যাশিং, HTTPS, এবং CSRF সুরক্ষা ব্যবহারের মাধ্যমে অ্যাপ্লিকেশনটিকে আরও নিরাপদ করা যায়। Rate limiting এবং token expiry অ্যাপ্লিকেশনের নিরাপত্তা আরও বাড়িয়ে তোলে।
Read more